#ifndef TOKEN_H
#define TOKEN_H

// Token类型枚举
typedef enum {
    // 关键字
    SELECT, FROM, WHERE, CREATE, TABLE, INSERT, INTO, VALUES, DELETE,IF, EXISTS, NOT, DROP, ALTER, SET, UPDATE, ADD, MODIFY, COLUMN,
    // 数据类型
    INT, VARCHAR, FLOAT, DOUBLE,
    // 标识符
    IDENTIFIER,
    // 常量
    NUMBER, STRING,
    // 运算符
    EQUAL, NOT_EQUAL, LESS, LESS_EQUAL, GREATER, GREATER_EQUAL,
    PLUS, MINUS, MULTIPLY, DIVIDE,
    // 分隔符
    LEFT_PAREN, RIGHT_PAREN, COMMA, SEMICOLON, DOT,
    // 结束符
    EOF_TOKEN,
    // 错误
    ERROR
} TokenType;

// Token结构
typedef struct {
    TokenType type;      // 种别码
    char* lexeme;        // 词素值
    int line;            // 行号
    int column;          // 列号
} Token;

// Token操作函数
Token* create_token(TokenType type, const char* lexeme, int line, int column);
void free_token(Token* token);
const char* token_type_to_string(TokenType type);

#endif // TOKEN_H